package com.doubi.utils;

import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 功能说明：时间工具类
 *
 * @author MrDoubi 2018-12-21 11:19:08
 */
@SuppressWarnings("all")
public class DateTimeUtil {

    //各种时间格式
    public static final String DATE_FORMAT = "yyyy-MM-dd";
    public static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
    public static final String TIME_FORMAT = "HH:mm:ss";

    //默认时间格式
    private static final String STANDARD_FORMAT = "yyyy-MM-dd HH:mm:ss";

    /**
     * 功能说明：获取当前系统时间的默认时间格式字符串
     *
     * @return 返回时间字符串
     * @author MrDoubi 2018-12-21 11:28:58
     */
    public static String getCurrentTime() {
        DateTime dateTime = new DateTime(new Date());
        return dateTime.toString(STANDARD_FORMAT);
    }

    /**
     * 功能说明：根据时间格式获取当前系统时间的字符串
     *
     * @param formatStr 参数：时间格式
     * @return 返回时间字符串
     * @author MrDoubi 2018-12-21 11:32:38
     */
    public static String getCurrentTime(String formatStr) {
        DateTime dateTime = new DateTime(new Date());
        return dateTime.toString(formatStr);
    }

    /**
     * 功能说明：根据时间字符串与时间格式，转化成时间对象
     *
     * @param dateTimeStr 参数：时间字符串
     * @param formatStr   参数：时间格式
     * @return 返回Date对象
     * @author MrDoubi 2018-12-21 11:18:41
     */
    public static Date strToDate(String dateTimeStr, String formatStr) {
        DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(formatStr);
        DateTime dateTime = dateTimeFormatter.parseDateTime(dateTimeStr);
        return dateTime.toDate();
    }

    /**
     * 功能说明：根据时间与时间格式，转化成时间字符串
     *
     * @param date      参数：时间对象
     * @param formatStr 参数：时间格式
     * @return 返回时间字符串
     * @author MrDoubi 2018-12-21 11:21:02
     */
    public static String dateToStr(Date date, String formatStr) {
        if (date == null) {
            return StringUtils.EMPTY;
        }
        DateTime dateTime = new DateTime(date);
        return dateTime.toString(formatStr);
    }

    /**
     * 功能说明：根据时间字符串获取默认时间格式的时间对象
     *
     * @param dateTimeStr 参数：时间字符串
     * @return 返回Date对象
     * @author MrDoubi 2018-12-21 11:22:15
     */
    public static Date strToDate(String dateTimeStr) {
        DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(STANDARD_FORMAT);
        DateTime dateTime = dateTimeFormatter.parseDateTime(dateTimeStr);
        return dateTime.toDate();
    }

    /**
     * 功能说明：根据时间获取默认时间格式的时间字符串
     *
     * @param date 参数：时间
     * @return 返回时间字符串
     * @author MrDoubi 2018-12-21 11:22:57
     */
    public static String dateToStr(Date date) {
        if (date == null) {
            return StringUtils.EMPTY;
        }
        DateTime dateTime = new DateTime(date);
        return dateTime.toString(STANDARD_FORMAT);
    }


    /**
     * 功能描述：判断当前时间是否在[startTime, endTime]区间，注意时间格式要一致
     *
     * @param nowTime   当前时间
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 返回boolean结果
     * @author MrDoubi 2019-07-03 09:50
     */
    public static boolean isEffectiveDate(Date nowTime, Date startTime, Date endTime) {
        if (nowTime.getTime() == startTime.getTime()
                || nowTime.getTime() == endTime.getTime()) {
            return true;
        }

        Calendar date = Calendar.getInstance();
        date.setTime(nowTime);

        Calendar begin = Calendar.getInstance();
        begin.setTime(startTime);

        Calendar end = Calendar.getInstance();
        end.setTime(endTime);

        if (date.after(begin) && date.before(end)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * MrDoubi
     * 2020年3月17日 16:44:24
     * 验证日期格式
     * @param str 日期
     * @param formt 格式
     * @return 是否正确
     */
    public static boolean isValidDate(String str,String formt) {
        boolean convertSuccess = true;
        SimpleDateFormat format = new SimpleDateFormat(formt);
        try {
            format.setLenient(false);
            format.parse(str);
        } catch (Exception e) {
            convertSuccess = false;
        }
        return convertSuccess;
    }

    /**
     * MrDoubi
     * 2020年3月17日 16:44:24
     * 判断哪个时间大  比较大小
     * 左边的大于等于右边的 返回 true
     * @param time 日期
     * @param time2 日期
     * @return 是否正确
     */
    public static boolean compare(Date date1,Date date2) {
        return date1.getTime() >= date2.getTime();
    }



    /**
     * 获取时间戳
     * @return
     */
    public static String getTimeStamp() {
        return String.valueOf(System.currentTimeMillis() / 1000);
    }
}
